科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道动态调用Webservice

动态调用Webservice

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

动态调用Webservice

作者:chinaunix 来源:chinaunix 2007年10月4日

关键字: 应用 技术 调用 中间件

  • 评论
  • 分享微博
  • 分享邮件

private object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args)

         {

              try

              {

                   System.Net.WebClient wc = new System.Net.WebClient();

                   System.IO.Stream stream = wc.OpenRead(url+"?WSDL");

                   System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);

                   System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();

                   sdi.AddServiceDescription(sd,"","");

                   System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);

                   System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

                   ccu.Namespaces.Add(cn);

                   sdi.Import(cn,ccu);

 

                   Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();

                   System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();

 

                   System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters();

                   cplist.GenerateExecutable = false;

                   cplist.GenerateInMemory = true;

                   cplist.ReferencedAssemblies.Add("System.dll");

                   cplist.ReferencedAssemblies.Add("System.XML.dll");

                   cplist.ReferencedAssemblies.Add("System.Web.Services.dll");

                   cplist.ReferencedAssemblies.Add("System.Data.dll");

 

                   System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);

                   if(true == cr.Errors.HasErrors)

                   {

                       System.Text.StringBuilder sb = new System.Text.StringBuilder();

                       foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)

                       {

                            sb.Append(ce.ToString());

                            sb.Append(System.Environment.NewLine);

                       }

                       throw new Exception(sb.ToString());

                   }

                   System.Reflection.Assembly assembly = cr.CompiledAssembly;

                   Type t = assembly.GetType(@namespace+"."+classname,true,true);

                   object obj = Activator.CreateInstance(t);

                   System.Reflection.MethodInfo mi = t.GetMethod(methodname);

                   return mi.Invoke(obj,args);

              }

              catch(Exception ex)

              {

                   throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));

              }

         }

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倷绶¢崣搴ㄥ窗閺囩偐鏋庨柕蹇嬪灪婵ジ鏌曡箛瀣偓鏍綖閿燂拷

    濠电姷顣介埀顒€鍟块埀顒€缍婇幃妯诲緞閹邦剛鐣洪梺闈浥堥弲婊勬叏濠婂牊鍋ㄦい鏍ㄧ〒閹藉啴鏌熼悜鈺傛珚鐎规洘宀稿畷鍫曞煛閸屾粍娈搁梻浣筋嚃閸ㄤ即宕㈤弽顐ュС闁挎稑瀚崰鍡樸亜閵堝懎濮┑鈽嗗亝濠㈡ê螞濡ゅ懏鍋傛繛鍡樻尭鐎氬鏌嶈閸撶喎顕i渚婄矗濞撴埃鍋撻柣娑欐崌閺屾稑鈹戦崨顕呮▊缂備焦顨呴惌鍌炵嵁鎼淬劌鐒垫い鎺戝鐎氬銇勯弽銊ф噥缂佽妫濋弻鐔碱敇瑜嶉悘鑼磼鏉堛劎绠為柡灞芥喘閺佹劙宕熼鐘虫緰闂佽崵濮抽梽宥夊垂閽樺)锝夊礋椤栨稑娈滈梺纭呮硾椤洟鍩€椤掆偓閿曪妇妲愰弮鍫濈闁绘劕寮Δ鍛厸闁割偒鍋勯悘锕傛煕鐎n偆澧紒鍌涘笧閹瑰嫰鎼圭憴鍕靛晥闂備礁鎼€氱兘宕归柆宥呯;鐎广儱顦伴崕宥夋煕閺囥劌澧ù鐘趁湁闁挎繂妫楅埢鏇㈡煃瑜滈崜姘跺蓟閵娧勵偨闁绘劕顕埢鏇㈡倵閿濆倹娅囨い蹇涗憾閺屾洟宕遍鐔奉伓

    重磅专题
    往期文章
    最新文章